Skip to content

Conversation

@nasahlpa
Copy link
Member

@nasahlpa nasahlpa commented Feb 10, 2026

Until now, a single instance of the register file containing 32-bit data words and 7-bit ECC tags was used. While the input of the register file was driven by the main core, the output of the register file was distributed to the main and the shadow core.

In this commit, as approved by this RFC, we are splitting up the data and ECC parts into two different register file instances:

  1. This instance is driven by the main core and only operates on the 32-bit data words. The outputs (32-bit data words) are forwarded to the main and the shadow core.
  2. This instance is driven by the shadow core and only operates on the 7-bit ECC words. The 7-bit ECC output is combined with the delayed 32-bit data output of the (1) RF instance. The shadow core uses ECC checkers to check if data and ECC (a) match and (b) are not manipulated using FI.

This helps us to save around 6 kGE of area.

@nasahlpa nasahlpa marked this pull request as ready for review February 10, 2026 14:46
@nasahlpa nasahlpa requested a review from a team as a code owner February 10, 2026 14:46
@nasahlpa nasahlpa requested review from andreaskurth, johannheyszl, marnovandermaas, rswarbrick, vogelpi and zi-v and removed request for a team February 10, 2026 14:46
Update code from upstream repository
https://github.com/lowRISC/ibex.git to revision
9f375d7dcb81294300bbe1014042f95a46073d18

* [dv] Adapt the `riscv_rf_intg_test` test (Pascal Nasahl)
* [dv] Adapt Ibex RF fault test (Pascal Nasahl)
* [rtl] Split data and ECC of the register file (Pascal Nasahl)
* [rtl] Remove `WrenCheck` and `RdataMuxCheck` from RF (Pascal Nasahl)

Signed-off-by: Pascal Nasahl <[email protected]>
As the register file wren enable check was removed, the assertion
`prim_onehot_check` is no longer needed as the `u_prim_onehot_check`
instance no longer is in the register file module.

Signed-off-by: Pascal Nasahl <[email protected]>
Depending on whether we are faulting the main or the shadow core,
use the correct data width size for the register file ports. The
main core operates on the plain data (RegFileDataWidth = 32 bit)
and the shadow core on the data + ECC (RegFileDataEccWidth = 39
bit). The write data that is forwarded to the shadow core RF
only uses the upper bits of the write data.

Signed-off-by: Pascal Nasahl <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant